package cn.mhome.merchant.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 加减乘除计算器
 * 
 * @author lvpeng 除法，四舍五入
 */
public class BigDecimalUtil {

	public static final int SCALA = 8;

	/**
	 * 两个数相加
	 * 
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static double add(double num1, double num2) {
		BigDecimal num1Decimal = new BigDecimal(num1 + "");
		BigDecimal num2Decimal = new BigDecimal(num2 + "");
		return num1Decimal.add(num2Decimal).doubleValue();
	}

	public static double add(BigDecimal num1, BigDecimal num2) {
		return Double.parseDouble(DecimalFormatUtil.retain2decimal(num1.add(num2).doubleValue()));
	}

	/**
	 * 两个数相减
	 * 
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static double subtract(double num1, double num2) {
		BigDecimal num1Decimal = new BigDecimal(num1 + "");
		BigDecimal num2Decimal = new BigDecimal(num2 + "");
		return num1Decimal.subtract(num2Decimal).doubleValue();
	}

	public static double subtract(BigDecimal num1, BigDecimal num2) {
		return Double.parseDouble(DecimalFormatUtil.retain2decimal(num1.subtract(num2).doubleValue()));
	}

	/**
	 * 两个数相减
	 * 
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static double divide(double num1, double num2) {
		BigDecimal num1Decimal = new BigDecimal(num1 + "");
		BigDecimal num2Decimal = new BigDecimal(num2 + "");
		return num1Decimal.divide(num2Decimal,SCALA,RoundingMode.HALF_UP.ordinal()).doubleValue();
	}

	public static double divide(BigDecimal num1, BigDecimal num2) {
		return num1.divide(num2,SCALA,RoundingMode.HALF_UP.ordinal()).doubleValue();
	}

	/**
	 * 两个数相减
	 * 
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static double multiply(double num1, double num2) {
		BigDecimal num1Decimal = new BigDecimal(num1 + "");
		BigDecimal num2Decimal = new BigDecimal(num2 + "");
		return num1Decimal.multiply(num2Decimal).doubleValue();
	}

	public static double multiply(BigDecimal num1, BigDecimal num2) {
		return num1.multiply(num2).doubleValue();
	}

	public static void main(String[] args) {
	}

	/**
	 * double为分
	 * 
	 * @param doubleValue
	 * @return
	 */
	public static long double2Long(double doubleValue) {
		return (new BigDecimal(doubleValue + "").multiply(new BigDecimal("100"))).longValue();
	}

	/**
	 * 分转double
	 * 
	 * @param longValue
	 * @return
	 */
	public static double long2Double(long longValue) {
		return Double.parseDouble(DecimalFormatUtil.retain2decimal(new BigDecimal(longValue + "")
				.divide(new BigDecimal("100"),SCALA, RoundingMode.HALF_UP.ordinal()).doubleValue()));
	}

	/**
	 * 将结果格式化为两位小数
	 * 
	 * @param doubleValue
	 * @return
	 */
	public static double format2PointNumber(double doubleValue) {
		return Double.parseDouble(DecimalFormatUtil.retain2decimal(doubleValue));
	}

}
